package cn.bas.core.vo;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.util.Assert;

import java.io.Serializable;

/*
    通用返回统一结果集
 */
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class CommonResult<T> implements Serializable {
    public static Integer CODE_SUCCESS = 0;
    // 错误码
    private Integer code;
    // 错误信息
    private String message;
    // 返回数据
    private T data;



    public static CommonResult success(){
        return success().setData(null).setMessage("操作成功");
    }

    public static  <T> CommonResult<T> success(T data){
       return  new CommonResult<T>().setCode(CODE_SUCCESS).setMessage("").setData(data);
    }

    /**
     * 将传入的result对象，转换成另外一个泛型结果的对象
     * @param  result 传入的result对象
     * @return 新的CommonResult对象
     * @param <T> 返回的泛型
     */

    public static <T> CommonResult<T> error(CommonResult<?> result){
        return error(result.getCode(),result.getMessage());
    }

    public static <T> CommonResult<T> error(Integer code,String message){
        Assert.isTrue(!CODE_SUCCESS.equals(code),"code 必须是错误的");
        return new CommonResult<T>().setCode(code).setMessage(message);
    }



}
